package es.uned.etsii.si3.taller;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import com.j256.ormlite.field.DataType;
import java.util.Date;
import java.math.BigDecimal;
import java.sql.SQLException;

@DatabaseTable(tableName = "partedetrabajo")
public class ParteTrabajo extends Persistente {
	public static final String ID_FIELD_NAME = "id";	
	public static final String ID_USUARIO_FIELD_NAME = "id_usuario";
	public static final String ID_TALLER_FIELD_NAME = "id_taller";
	public static final String ID_VEHICULO_FIELD_NAME = "id_vehiculo";
	public static final String DESCRIPCION_FIELD_NAME = "descripcion";
	public static final String PRECIOPRESUPUESTO_FIELD_NAME = "precioPresupuesto";
	public static final String ACEPTADO_FIELD_NAME = "aceptado";	
	public static final String REFERENCIA_FIELD_NAME = "referencia";
	public static final String ALBARAN_FIELD_NAME = "albaran";
	public static final String FECHAENTRADA_FIELD_NAME = "fechaEntrada";
	public static final String FECHAESTIMADA_FIELD_NAME = "fechaEstimada";
	public static final String FECHASALIDA_FIELD_NAME = "fechaSalida";
	public static final String AVISADO_FIELD_NAME = "avisado";
	public static final String VISTOBUENO_FIELD_NAME = "vistoBueno";
	public static final String PRECIOFINAL_FIELD_NAME = "precioFinal";
	
	@DatabaseField(generatedId = true)
	int id;
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_USUARIO_FIELD_NAME)
	Usuario usuario;		//cliente
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_TALLER_FIELD_NAME)
	Taller taller;
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_VEHICULO_FIELD_NAME)
	Vehiculo vehiculo;
	@DatabaseField(width = 100)
	String descripcion;
	@DatabaseField
	BigDecimal precioPresupuesto; //añadido
	@DatabaseField
	boolean aceptado;  //añadido
	@DatabaseField(width = 25)
	String referencia;
	@DatabaseField(width = 25)
	String albaran;
	@DatabaseField(dataType=DataType.DATE)
	Date fechaEntrada;
	@DatabaseField(dataType=DataType.DATE)
	Date fechaEstimada;
	@DatabaseField(dataType=DataType.DATE)
	Date fechaFin;
	@DatabaseField(dataType=DataType.DATE)
	Date fechaSalida;
	@DatabaseField
	boolean avisado;
	@DatabaseField
	boolean vistoBueno;
	@DatabaseField
	BigDecimal precioFinal; // no está incluido en el creador. Se define a null
	
	
	/**
	 * Crea un parte de trabajo a partir de los parámetros indicados
	 * @param usuario
	 * @param taller
	 * @param vehiculo
	 * @param descripcion
	 * @param precioPresupuesto
	 * @param aceptado
	 * @param referencia
	 * @param albaran
	 * @param fechaEntrada
	 * @param fechaEstimada
	 * @param fechaFin
	 * @param fechaSalida
	 * @param avisado
	 * @param vistoBueno
	 * @return el objeto partetrabajo
	 * @throws SQLException
	 */
	public
	static ParteTrabajo crear(Usuario usuario, Taller taller, Vehiculo vehiculo, 
			String descripcion, BigDecimal precioPresupuesto, boolean aceptado, 
			String referencia, String albaran, 
			Date fechaEntrada, Date fechaEstimada, Date fechaFin,
			Date fechaSalida, boolean avisado, boolean vistoBueno) 
			throws SQLException
	{
		ParteTrabajo parteTrabajo = new ParteTrabajo();

		parteTrabajo.setUsuario(usuario);
		parteTrabajo.setTaller(taller);
		parteTrabajo.setVehiculo(vehiculo);
		parteTrabajo.setDescripcion(descripcion);
		parteTrabajo.setAceptado(aceptado);
		parteTrabajo.setPrecioPresupuesto(precioPresupuesto);
		parteTrabajo.setReferencia(referencia);
		parteTrabajo.setAlbaran(albaran);
		parteTrabajo.setFechaEntrada(fechaEntrada); 
		parteTrabajo.setFechaEstimada(fechaEstimada);
		parteTrabajo.setFechaFin(fechaFin);  
		parteTrabajo.setFechaSalida(fechaSalida); 
		parteTrabajo.setAvisado(avisado);   
		parteTrabajo.setVistoBueno(vistoBueno);
		parteTrabajo.setPrecioFinal(null);
		getClassDao(ParteTrabajo.class).create(parteTrabajo);

		return parteTrabajo;
	}

	/**
	 * Crea un parte de trabajo requiriendo menos datos, para creaciones
	 * básicas (nuevo parte de entrada)
	 * @param usuario
	 * @param taller
	 * @param vehiculo
	 * @param descripcion
	 * @param fechaEntrada
	 * @return el objeto parte trabajo
	 * @throws SQLException
	 */
	public
	static ParteTrabajo crear(Usuario usuario, Taller taller, Vehiculo vehiculo, 
			String descripcion, Date fechaEntrada) 
			throws SQLException
	{
		ParteTrabajo parteTrabajo = new ParteTrabajo();

		parteTrabajo.setUsuario(usuario);
		parteTrabajo.setTaller(taller);
		parteTrabajo.setVehiculo(vehiculo);
		parteTrabajo.setDescripcion(descripcion);
		parteTrabajo.setAceptado(false);
		parteTrabajo.setPrecioPresupuesto(null); 
		parteTrabajo.setAlbaran(null);
		parteTrabajo.setFechaEntrada(fechaEntrada); 
		parteTrabajo.setFechaEstimada(null);
		parteTrabajo.setFechaFin(null);
		parteTrabajo.setFechaSalida(null);
		parteTrabajo.setAvisado(false); 
		parteTrabajo.setVistoBueno(false);
		parteTrabajo.setPrecioFinal(null); //0????
		getClassDao(ParteTrabajo.class).create(parteTrabajo);
		
		return parteTrabajo;
	}

	
	public
	ParteTrabajo() {
		// ORM Lite necesita un constructor por defecto
	}

	/**
	 * getters y setters
	 */
	public int         	getId()          		{ return id; }
	public Usuario		getUsuario()	 		{ return usuario; }
	public Taller      	getTaller()      		{ return taller; }
	public Vehiculo		getVehiculo() 	 		{ return vehiculo; }
	public String 		getDescripcion() 		{ return descripcion; }
	public BigDecimal	getPrecioPresupuesto() 	{ return precioPresupuesto; }
	public boolean 		getAceptado() 			{ return aceptado; }
	public String		getReferencia()	 		{ return referencia; }
	public String 		getAlbaran()	  		{ return albaran; }
	public Date 		getFechaEntrada() 		{ return fechaEntrada; }
	public Date 		getFechaEstimada() 		{ return fechaEstimada; }
	public Date 		getFechaFin()	 		{ return fechaFin; }
	public Date 		getFechaSalida() 		{ return fechaSalida; }
	public boolean		getAvisado()			{ return avisado; }
	public boolean		getVistoBueno()			{ return vistoBueno; }
	public BigDecimal	getPrecioFinal() 		{ return precioFinal; }
	
	public
	void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public
	void setTaller(Taller taller) {
		this.taller = taller;
	}

	public
	void setVehiculo(Vehiculo vehiculo) {
		this.vehiculo = vehiculo;
	}
	
	public
	void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public void setPrecioPresupuesto(BigDecimal d) { 
		this.precioPresupuesto = d; 
	}
	
	public void setAceptado(boolean b) { 
		this.aceptado = b; 
	}	

	public
	void setReferencia(String referencia) {
		this.referencia = referencia;
	}

	public
	void setAlbaran(String albaran) {
		this.albaran = albaran;
	}

	public
	void setFechaEntrada(Date fechaEntrada) {
		this.fechaEntrada = fechaEntrada;
	}

	public
	void setFechaEstimada(Date fechaEstimada) {
		this.fechaEstimada = fechaEstimada;
	}

	public
	void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}

	public
	void setFechaSalida(Date fechaSalida) {
		this.fechaSalida = fechaSalida;
	}

	public
	void setAvisado(boolean avisado) {
		this.avisado = avisado;
	}

	public
	void setVistoBueno(boolean vistoBueno) {
		this.vistoBueno = vistoBueno;
	}
	
	public void setPrecioFinal(BigDecimal d) { 
		this.precioFinal = d; 
	}

}

